package com.whosly.mysql.protocol.packet.impl.ok.data;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;

import java.io.Serializable;

/**
 * @author 风杨
 * @see <a href="yueny09@163.com">mailTo: yueny09@163.com</a>
 */
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class OKData implements Serializable {
    ///////////////////////////////////////////////////
    //    PIDItemFormat                  PIDItemFormat
    ///////////////////////////////////////////////////
    private Long pid;

    ///////////////////////////////////////////////////////
    //   AffectedRowsItemFormat       AffectedRowsItemFormat
    ///////////////////////////////////////////////////////
    /**
     * 影响行数
     */
    @Builder.Default
    private Long affectedRows = 0L;


    ///////////////////////////////////////////////////////
    //   ElapsedItemFormat       ElapsedItemFormat
    ///////////////////////////////////////////////////////
    /**
     * 服务耗时, ms
     */
    private Long elapsedMillCost;


    ///////////////////////////////////////////////////////
    //   Read Size       Read Size
    ///////////////////////////////////////////////////////
    /**
     * 读取大小
     */
    private Long readByteSize;
    private String readByteSizeAtTime;

    /**
     * 行读速度
     */
    private Double rowInSec;

    /**
     * 行读大小
     */
    private Integer kibInSec;


    ///////////////////////////////////////////////////////
    //   memo      memo
    ///////////////////////////////////////////////////////
    /**
     * 自定义备注
     */
    private String memo;

    /**
     * 固定格式：
     * pid#(${pid}), Read ${rows} rows, ...
     */
    @Override
    public String toString() {
        StringBuffer sbLine1 = new StringBuffer();

        sbLine1.append(PIDItemFormat.format(pid));

        sbLine1.append(AffectedRowsItemFormat.format(affectedRows));

        sbLine1.append(ElapsedItemFormat.format(elapsedMillCost));

        StringBuffer sbLine2 = new StringBuffer();
        sbLine2.append(ReadSizeItemFormat.format(readByteSize, readByteSizeAtTime, rowInSec, kibInSec));

        if(StringUtils.isNotEmpty(memo)){
            sbLine2.append(memo);
            sbLine2.append(",.");
        }

        // 换行
        if(StringUtils.isNotEmpty(sbLine2.toString())){
            sbLine1.append("\n");
        }

        return sbLine1.toString() + sbLine2.toString();
    }

}
